package dao;

import hibernateUtils.HibernateUtil;

import java.util.List;

import model.Mesa;

import org.hibernate.Session;
import org.hibernate.SessionFactory;

import beans.MesaBean;
import controller.AdministradorMesa;

public class HibernateMesaDAO {

	private static HibernateMesaDAO instancia = null;
	private static SessionFactory sf = null;

	public static HibernateMesaDAO getInstancia() {
		if (instancia == null) {
			sf = HibernateUtil.getSessionFactory();
			instancia = new HibernateMesaDAO();
		}
		return instancia;
	}

	public void grabarMesa(MesaBean m) {
		/*
		 * Convierto el parametro a bean MesaBean aux = new MesaBean();
		 * aux.setCapacidad(m.getCapacidad()); aux.setEstado(m.getEstado());
		 * 
		 * Abro sesion y grabo el objeto
		 */
		Session session = sf.openSession();
		session.beginTransaction();
		session.persist(m);
		session.flush();
		session.getTransaction().commit();
		session.close();
	}

	public List<Mesa> getMesasDisponibles() {
		Session session = sf.openSession();
		List<MesaBean> mesas = session
				.createQuery("select m from MesaBean m where m.estado=?")
				.setString(0, "disponible").list();
		session.close();
		return AdministradorMesa.getInstancia().fromBeanTOModel(mesas);

	}

	public void updateMesa(Mesa m) {

		MesaBean mb = AdministradorMesa.getInstancia().fromModelTOBean(m);

		Session session = sf.openSession();
		session.beginTransaction();
		session.saveOrUpdate(mb);
		session.flush();
		session.getTransaction().commit();
		session.close();

	}

	public MesaBean getMesa(int nroMesa) {

		Session session = sf.openSession();
		MesaBean m;
		m = (MesaBean) session.get(MesaBean.class, nroMesa);
		return m;

	}

	public void updateMesas(List<Mesa> mesas) {
		for(Mesa m:mesas)
			this.updateMesa(m);
		
	}

}
